import App from './App'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
  ...App
})
app.$mount()

// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  let baseUrl = "http://localhost:8080/emos"
  /**
   * 全局接口函数
   */
  app.config.globalProperties.$url = {
	register: baseUrl + "/user/register",
	login: baseUrl + "/user/login",
	checkin: baseUrl + "/checkin/checkin",
	validCanCheckIn: baseUrl + "/checkin/validCanCheckIn",
	searchTodayCheckin: baseUrl + "/checkin/searchTodayCheckin",
	searchUserSummary: baseUrl + "/user/searchUserSummary"
  }

  /**
   * 全局自定义的ajax接口函数
   * @param {Object} url	api地址
   * @param {Object} method	get / post / put / delete
   * @param {Object} data	传参数数据
   * @param {Object} fun	方法名
   */
  app.config.globalProperties.$ajax = function(url, method, data, fun) {
	uni.request({
		url: url,
		method: method,
		header: {
			token: uni.getStorageSync('token')
		},
		data: data,
		success: function(resp){
			if (resp.statusCode == 401) {
				uni.redirectTo({
					url:  '../user/login'
				});
			} else if (resp.statusCode == 200 && resp.data.code == 200) {
				let data = resp.data;
				if (data.hasOwnProperty("token")) {
					console.log(resp.data);
					let token = data.token;
					uni.setStorageSync("token", token);
				}
				fun(resp)
			} else {
				uni.showToast({
					icon: 'none',
					title: resp.data
				})
			}
		}
	})

	/**
	 * 全局权限验证函数
	 * 
	 * 该函数用于在应用的任意组件或页面中进行权限验证，判断当前用户是否具有某些指定权限。
	 * 通过在应用的 `app.config.globalProperties` 中注册该函数，确保可以在全局范围内使用。
	 * 
	 * @param {Object} perms - 需要验证的权限列表（通常为一个字符串数组，每个元素代表一种权限）。
	 * @returns {Boolean} result - 返回布尔值 `true` 或 `false`。如果用户具有任意一个指定权限，则返回 `true`，否则返回 `false`。
	 * 
	 * 功能描述：
	 * 1. 从本地存储中获取当前用户的权限列表（通常在用户登录后存储）。
	 * 2. 遍历传入的 `perms` 权限列表，检查用户的权限是否包含在这些权限之中。
	 * 3. 如果找到匹配的权限，则立即返回 `true`；如果所有权限都不匹配，返回 `false`。
	 * 
	 * 使用场景：
	 * 可以在页面或组件中调用 `$checkPermission` 来判断用户是否具备某项操作的权限，比如显示或隐藏某些功能按钮，控制页面访问权限等。
	 */
	app.config.globalProperties.$checkPermission = function(perms) {
		let permission = uni.getStorageSync("permission"); // 从本地存储中获取当前用户的权限列表
		let result = false;
		
		// 遍历传入的权限数组，逐个检查用户是否具备这些权限
		for(let one of perms) {
			// 如果找到用户拥有的权限，则设置 result 为 true 并结束循环
			if (permission.indexOf(one) != -1) {
				result = true;
				break;
			}
		}
		
		// 返回权限检查结果
		return result;
	}
}
  return {
    app
  }
}
// #endif